/**
 * “debounce” 函数通过延迟执行直到经过一定时间而没有额外调用来帮助限制函数调用的频率。
 * @param {Function} callback - “callback” 该函数先执行一次，之后重复点击不会生效，需等待 `delay` ms后才可再次执行
 * @param {number} [delay=1000] - “delay”参数指定最后一次调用后“callback”函数的执行将延迟的时间（以毫秒为单位）
 * 毫秒（1 秒）。
 * @returns “debounce”函数返回一个新函数，该函数将在指定的“delay”时间过去后执行提供的“callback”函数，而不会再次调用新函数。
 */
export function debounce(callback: Function, delay: number = 1000) {
	let timer: NodeJS.Timeout | null = null;
	return () => {
		if (timer) {
			clearTimeout(timer);
		}
		if (!timer) {
			callback();
		}
		timer = setTimeout(() => {
			timer = null;
		}, delay);
	};
}
